package com.otv.managed.bean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;

import org.springframework.dao.DataAccessException;

import com.otv.alojamiento.service.IAlojamientoService;
import com.otv.model.Alojamiento;
import com.otv.model.Arriendo;
import com.otv.model.Pieza;
import com.otv.model.Privilegio;
import com.otv.model.Servicio;
import com.otv.pieza.service.IPiezaService;



@ManagedBean(name="piezaMB")
@RequestScoped
public class PiezaManagedBean implements Serializable {
	
	private static final long serialVersionUID = 1L;
	private static final String SUCCESS = "success";
	private static final String ERROR   = "error";
	
	//Spring Service is injected...
	@ManagedProperty(value="#{PiezaService}")
	IPiezaService piezaService;
	@ManagedProperty(value="#{AlojamientoService}")
	IAlojamientoService alojamientoService;
	
	List<Alojamiento> alojamientoList;	
	List<Pieza> piezaList;
	
	private int id;
	private int alojamiento;
	private String nombre;
	private boolean disponible;
	private Double valor;
	private String descripcion;
	
	private List<Privilegio> privilegios;
	private List<Servicio> servicios;
	private List<Arriendo> arriendos;


	
//	private Alojamiento a () {
//		Alojamiento a = new Alojamiento();
//		a.setId(0);
//		return a;
//	}
	
	

	public String addPieza () {
		try {
			Pieza pieza = new Pieza();
			pieza.setId(getId());
			pieza.setAlojamiento(getAlojamientoService().getAlojamientoById(getAlojamiento()));
//			pieza.setAlojamiento(this.a());	
			pieza.setNombre(getNombre());
			pieza.setDisponible(isDisponible());
			pieza.setValor(getValor());
			pieza.setDescripcion(getDescripcion());
			pieza.setPrivilegios(getPrivilegios());
			pieza.setServicios(getServicios());
			pieza.setArriendos(getArriendos());
			pieza.setArriendos(getArriendos());
			
			getPiezaService().addPieza(pieza);

			return SUCCESS;
		} catch (DataAccessException e) {
			e.printStackTrace();
		} 	
		
		return ERROR;
	}
	
	/**
	 * Reset Fields
	 * 
	 */
	public void reset() {
		this.setId(0);
		this.setAlojamiento(0);
		this.setDisponible(true);
		this.setArriendos(null);
		this.setServicios(null);
		this.setPrivilegios(null);
		this.setDescripcion("");
		this.setNombre("");
		this.setValor(0.0);
	}


	

	public IAlojamientoService getAlojamientoService() {
		return alojamientoService;
	}

	public void setAlojamientoService(IAlojamientoService alojamientoService) {
		this.alojamientoService = alojamientoService;
	}

	public List<Alojamiento> getAlojamientoList() {
		return getAlojamientoService().getAlojamientos();
	}

	public void setAlojamientoList(List<Alojamiento> alojamientoList) {
		this.alojamientoList = alojamientoList;
	}

	public IPiezaService getPiezaService() {
		return piezaService;
	}



	public void setPiezaService(IPiezaService piezaService) {
		this.piezaService = piezaService;
	}



	public List<Pieza> getPiezaList() {
		this.piezaList = new ArrayList<Pieza>();
		this.piezaList.addAll(getPiezaService().getPiezas());
		return piezaList;
	}



	public void setPiezaList(List<Pieza> piezaList) {
		this.piezaList = piezaList;
	}



	public int getId() {
		return id;
	}



	public void setId(int id) {
		this.id = id;
	}





	public int getAlojamiento() {
		return alojamiento;
	}

	public void setAlojamiento(int alojamiento) {
		this.alojamiento = alojamiento;
	}

	public String getNombre() {
		return nombre;
	}



	public void setNombre(String nombre) {
		this.nombre = nombre;
	}



	public boolean isDisponible() {
		return disponible;
	}



	public void setDisponible(boolean disponible) {
		this.disponible = disponible;
	}



	public Double getValor() {
		return valor;
	}



	public void setValor(Double valor) {
		this.valor = valor;
	}



	public String getDescripcion() {
		return descripcion;
	}



	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}



	public List<Privilegio> getPrivilegios() {
		return privilegios;
	}



	public void setPrivilegios(List<Privilegio> privilegios) {
		this.privilegios = privilegios;
	}



	public List<Servicio> getServicios() {
		return servicios;
	}



	public void setServicios(List<Servicio> servicios) {
		this.servicios = servicios;
	}



	public List<Arriendo> getArriendos() {
		return arriendos;
	}



	public void setArriendos(List<Arriendo> arriendos) {
		this.arriendos = arriendos;
	}

	
	
	
}